package compilador.lexico;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import compilador.procesos.Proceso;
import compilador.procesos.Proceso1;
import compilador.procesos.Proceso2;
import compilador.procesos.Proceso3;
import compilador.procesos.Proceso4;
import compilador.procesos.Proceso5;
import compilador.procesos.Proceso6;
import compilador.procesos.Proceso7;

/**
 * @author  Matias
 */
@SuppressWarnings("unchecked")
public class LectorToken {
	/**
	 * @uml.property  name="tS"
	 * @uml.associationEnd  
	 */
	TablaSimbolos TS;
	/**
	 * @uml.property  name="nroLinea"
	 */
	int nroLinea;
	/**
	 * @uml.property  name="tokenActual"
	 * @uml.associationEnd  
	 */
	Token tokenActual; 
	/**
	 * @uml.property  name="lector"
	 * @uml.associationEnd  
	 */
	LectorCodigo Lector;
	StringBuffer actual;
	/**
	 * @uml.property  name="errores"
	 */
	List<Error> Errores;
	
	int matrizEstado [][] = {
	//          0	  1    2    3    4   5	  6   7    8   9   10  11  12  13  14  15  16  17  18  19  20  21  22
    /*0*/ {  1,   2, 11, 11, 11,   6, 11, 11, 11, 11, 11, 11, 11, 11, 10,   3, 11,  4,   5,   9,   0,  0,  0},
    /*1*/ {  1,   1, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*2*/ {11,   2, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*3*/ {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*4*/ {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*5*/ {11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*6*/ {11, 11, 11, 11, 11,   7, 11, 11, 11, 11, 11 ,11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
    /*7*/ {  7,   7,   7,  7,   7,   8,   7,   7,   7,  7,   7,  7,   7,   7,   7,   7,   7,  7,  7,   7,   7,   7,   7},
    /*8*/ {  7,   7,   7,  7,   7, 11,   7,   7,   7,  7,   7,  7,   7,   7,   7,   7,   7,  7,  7,   7,   7,   7,   7},
    /*9*/ {  9,   9,   9,  9,   9,   9,   9,   9,   9,  9,   9,   9,  9,   9,   9,   9,   9,  9,  9, 11,   9, 11,   9},
    /*10*/{11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11}
	};
	/**
	 * @uml.property  name="matrizProcesos"
	 * @uml.associationEnd  multiplicity="(0 -1)"
	 */
	Proceso matrizProcesos [][] =  new Proceso[11][23];
//    = {
//			//0															                              //1																                        //2														                                //3																                       //4															                               //5															                               //6															                              //7															                             //8																                         //9															                             //10																						//11															 							//12															                           //13														                               //14															                          //15															                          //16															                         //17															                            //18														                                //19															                            //20															                           //21															                          //22																							
///*0*/	    {new Proceso1(Lector,TS,actual,tokenActual),                           new Proceso1(Lector,TS,actual,tokenActual),                          new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso1(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                          new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),							new Proceso4(Lector,TS,actual,tokenActual),							new Proceso4(Lector,TS,actual,tokenActual),						   new Proceso4(Lector,TS,actual,tokenActual), 						   new Proceso1(Lector,TS,actual,tokenActual),                          new Proceso1(Lector,TS,actual,tokenActual),                           new Proceso4(Lector,TS,actual,tokenActual),                           new Proceso1(Lector,TS,actual,tokenActual),                          new Proceso1(Lector,TS,actual,tokenActual),                           new Proceso1(Lector,TS,actual,tokenActual),                           new Proceso6(),                           										   new Proceso6(),                         										   new Proceso6()},
///*1*/		{new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea)},
///*2*/	    {new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea)},
///*3*/		{new Proceso7(Lector,Errores,nroLinea)									,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso5(Lector,TS,actual,tokenActual)                           ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  },
///*4*/		{new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso5(Lector,TS,actual,tokenActual)							,new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea)},
///*5*/		{new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso5(Lector,TS,actual,tokenActual)							,new Proceso5(Lector,TS,actual,tokenActual)							,new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea)},
///*6*/		{new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso6() 																	  ,new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea),new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea)},
///*7*/		{new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()	             													   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()																	   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																     },
///*8*/		{new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()	             													   ,new Proceso6()																	  ,new Proceso5(Lector,TS,actual,tokenActual)							  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()																	   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																     },
///*9*/		{new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()	             													   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																   ,new Proceso6()																	   ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	  ,new Proceso6()																	 ,new Proceso6()																	,new Proceso6()																	,new Proceso6()																	,new Proceso5(Lector,TS,actual,tokenActual)     					   ,new Proceso6()																	  ,new Proceso5(Lector,TS,actual,tokenActual)							  ,new Proceso6()																     },
///*10*/	{new Proceso7(Lector,Errores,nroLinea)									,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso5(Lector,TS,actual,tokenActual)                            ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  ,new Proceso7(Lector,Errores,nroLinea)                                  }
//};
		
	public LectorToken(TablaSimbolos TS, String code){
		this.TS = TS;
		this.nroLinea = 1;
    	Lector = new LectorCodigo(code);
		tokenActual = new Token();
		this.Errores = new ArrayList<Error>();
		actual = new StringBuffer();
		InitProcesos();
		
	}
	
	public Token getToken(){
		int estado = 0;
		
		char c =' ';
		tokenActual.setID("");
		tokenActual.setValor("");
		actual.replace(0, actual.length(),"");
		if (Lector.HasMoreElements())
		{
			boolean fin = false;
			while ((!fin)&&(Lector.HasMoreElements())){
				if (estado != 11){
					
					c = Lector.readNext();
					if (c == '\n')    //c == '\r'
						nroLinea++;
					int mapeo = this.Mapeo(c);
					if (mapeo != -1){
						tokenActual = matrizProcesos[estado][mapeo].ejecutar(c,nroLinea);
						estado = matrizEstado[estado][mapeo];
					}
					else
					{  if ((estado!=7)&&(estado!=8)&&(estado!=9)){
							if ((estado == 1)||(estado == 2)){
								Error e = new Error(Error.ERRROR_CARACTER_INVALIDO,nroLinea,String.valueOf(c));
								Errores.add(e);
								c =Lector.readNext();
								Proceso3 p3 = new Proceso3(Lector,TS, actual, tokenActual, Errores,nroLinea);
								tokenActual = p3.ejecutar(c,nroLinea);
								return tokenActual;
							}
							else{
								Error e = new Error(Error.ERRROR_CARACTER_INVALIDO,nroLinea,String.valueOf(c));
								Errores.add(e);
								estado = 0;
								actual.replace(0, actual.length(),"");
							}
						}
					}
				}
				else
				{
					estado = 0;
					actual.replace(0, actual.length(),"");
					if (tokenActual.getID().compareTo("")!=0){
						fin = true;
						return tokenActual;
					}
				}
			}
			if (estado != 11){
				Error e = new Error(Error.ERRROR_FIN_CODIGO_INESPERADO,nroLinea,"");
				Errores.add(e);
			}
			return tokenActual;
		}
		else
			return null;
	}
	
	private int Mapeo(char c){
		if (((c >= 'a') && (c <= 'z'))||((c >= 'A') && (c <= 'Z')))	return 0;
		else if ((c >= '0') && (c <= '9'))	return 1;
		else if (c == '*')return 2;
		else if (c == '+')return 3;
		else if (c == '-')return 4;
		else if (c == '/')return 5;
		else if (c == '{')return 6;
		else if (c == '}')return 7;
		else if (c == '[')return 8;
		else if (c == ']')return 9;
		else if (c == '(')return 10;
		else if (c == ')')return 11;
		else if (c == ',')return 12;
		else if (c == ';')return 13;
		else if (c == '.')return 14;
		else if (c == ':')return 15;
		else if (c == '=')return 16;
		else if (c == '>')return 17;
		else if (c == '<')return 18;
		else if (c == '\'')return 19;
		else if ((c == '\n')||(c==' '))return 20;
		else if (c == '\r')return 21;
		else if (c == '\t')return 22;
		else return -1;
	}
	
	/**
	 * @return
	 * @uml.property  name="errores"
	 */
	public List<Error> getErrores(){
		return Errores;
	}
	
	public void addError(Error e){
		Errores.add(e);
	}
	
	public boolean HasMoreElements(){
		return Lector.HasMoreElements();
	}
	
	public TablaSimbolos getTablaSimbolos(){
		return TS;
	}
	
	/**
	 * @return
	 * @uml.property  name="nroLinea"
	 */
	public int getNroLinea(){
		return nroLinea;
	}
	
	private void InitProcesos(){
		Proceso6 proceso6 =new Proceso6(tokenActual);
		
		matrizProcesos[0][0] = new Proceso1(Lector,TS,actual,tokenActual);
        matrizProcesos[0][1] = new Proceso1(Lector,TS,actual,tokenActual);
        matrizProcesos[0][2] = new Proceso4(Lector,TS,actual,tokenActual); 
        matrizProcesos[0][3] = new Proceso4(Lector,TS,actual,tokenActual); 
        matrizProcesos[0][4] = new Proceso4(Lector,TS,actual,tokenActual);
        matrizProcesos[0][5] = new Proceso1(Lector,TS,actual,tokenActual);
        matrizProcesos[0][6] = new Proceso4(Lector,TS,actual,tokenActual);
        matrizProcesos[0][7] = new Proceso4(Lector,TS,actual,tokenActual);
       	matrizProcesos[0][8] = new Proceso4(Lector,TS,actual,tokenActual);
   		matrizProcesos[0][9] = new Proceso4(Lector,TS,actual,tokenActual);
   		matrizProcesos[0][10] = new Proceso4(Lector,TS,actual,tokenActual);
  		matrizProcesos[0][11] = new Proceso4(Lector,TS,actual,tokenActual);
		matrizProcesos[0][12] = new Proceso4(Lector,TS,actual,tokenActual);
    	matrizProcesos[0][13] = new Proceso4(Lector,TS,actual,tokenActual);
		matrizProcesos[0][14] =  new Proceso1(Lector,TS,actual,tokenActual);
		matrizProcesos[0][15] =  new Proceso1(Lector,TS,actual,tokenActual);
		matrizProcesos[0][16] =  new Proceso4(Lector,TS,actual,tokenActual);
		matrizProcesos[0][17] =  new Proceso1(Lector,TS,actual,tokenActual);
		matrizProcesos[0][18] =  new Proceso1(Lector,TS,actual,tokenActual);
		matrizProcesos[0][19] =  new Proceso1(Lector,TS,actual,tokenActual);
		matrizProcesos[0][20] =  proceso6;
		matrizProcesos[0][21] =  proceso6;
		matrizProcesos[0][22] =  proceso6;
		
		matrizProcesos[1][0] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[1][1] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[1][2] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[1][3] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[1][4] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[1][5] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[1][6] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[1][7] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[1][8] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[1][9] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[1][10] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[1][11] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][12] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[1][13] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][14] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][15] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][16] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][17] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][18] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][19] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][20] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][21] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[1][22] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		
		matrizProcesos[2][0] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[2][1] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[2][2] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[2][3] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[2][4] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[2][5] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[2][6] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[2][7] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[2][8] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[2][9] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[2][10] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[2][11] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][12] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[2][13] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][14] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][15] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][16] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][17] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][18] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][19] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][20] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][21] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[2][22] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		
		matrizProcesos[3][0] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][1] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][2] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][3] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][4] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][5] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][6] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][7] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][8] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][9] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][10] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][11] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][12] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][13] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][14] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][15] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][16] = new Proceso5(Lector,TS,actual,tokenActual, Errores);
		matrizProcesos[3][17] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][18] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][19] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][20] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][21] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[3][22] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		
		matrizProcesos[4][0] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[4][1] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[4][2] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[4][3] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[4][4] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[4][5] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[4][6] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[4][7] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[4][8] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[4][9] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[4][10] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[4][11] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][12] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[4][13] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][14] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][15] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][16] =  new Proceso5(Lector,TS,actual,tokenActual, Errores);
		matrizProcesos[4][17] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][18] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][19] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][20] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][21] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[4][22] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		
		matrizProcesos[5][0] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[5][1] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[5][2] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[5][3] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[5][4] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[5][5] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[5][6] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[5][7] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[5][8] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[5][9] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[5][10] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[5][11] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][12] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[5][13] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][14] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][15] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][16] =  new Proceso5(Lector,TS,actual,tokenActual, Errores);
		matrizProcesos[5][17] =  new Proceso5(Lector,TS,actual,tokenActual, Errores);
		matrizProcesos[5][18] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][19] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][20] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][21] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[5][22] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		
		matrizProcesos[6][0] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[6][1] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[6][2] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[6][3] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[6][4] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[6][5] = proceso6;
        matrizProcesos[6][6] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[6][7] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[6][8] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[6][9] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[6][10] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[6][11] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][12] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[6][13] = new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][14] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][15] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][16] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][17] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][18] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][19] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][20] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][21] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[6][22] =  new Proceso3(Lector,TS,actual,tokenActual, Errores, nroLinea);
		
		matrizProcesos[7][0] = proceso6;
        matrizProcesos[7][1] = proceso6;
        matrizProcesos[7][2] = proceso6; 
        matrizProcesos[7][3] = proceso6; 
        matrizProcesos[7][4] = proceso6;
        matrizProcesos[7][5] = proceso6;
        matrizProcesos[7][6] = proceso6;
        matrizProcesos[7][7] = proceso6;
       	matrizProcesos[7][8] = proceso6;
   		matrizProcesos[7][9] = proceso6;
   		matrizProcesos[7][10] = proceso6;
  		matrizProcesos[7][11] = proceso6;
		matrizProcesos[7][12] = proceso6;
    	matrizProcesos[7][13] = proceso6;
		matrizProcesos[7][14] =  proceso6;
		matrizProcesos[7][15] =  proceso6;
		matrizProcesos[7][16] =  proceso6;
		matrizProcesos[7][17] =  proceso6;
		matrizProcesos[7][18] =  proceso6;
		matrizProcesos[7][19] =  proceso6;
		matrizProcesos[7][20] =  proceso6;
		matrizProcesos[7][21] =  proceso6;
		matrizProcesos[7][22] =  proceso6;
	
		matrizProcesos[8][0] = proceso6;
        matrizProcesos[8][1] = proceso6;
        matrizProcesos[8][2] = proceso6; 
        matrizProcesos[8][3] = proceso6; 
        matrizProcesos[8][4] = proceso6;
        matrizProcesos[8][5] = proceso6;
        matrizProcesos[8][6] = proceso6;
        matrizProcesos[8][7] = proceso6;
       	matrizProcesos[8][8] = proceso6;
   		matrizProcesos[8][9] = proceso6;
   		matrizProcesos[8][10] = proceso6;
  		matrizProcesos[8][11] = proceso6;
		matrizProcesos[8][12] = proceso6;
    	matrizProcesos[8][13] = proceso6;
		matrizProcesos[8][14] =  proceso6;
		matrizProcesos[8][15] =  proceso6;
		matrizProcesos[8][16] =  proceso6;
		matrizProcesos[8][17] =  proceso6;
		matrizProcesos[8][18] =  proceso6;
		matrizProcesos[8][19] =  proceso6;
		matrizProcesos[8][20] =  proceso6;
		matrizProcesos[8][21] =  proceso6;
		matrizProcesos[8][22] =  proceso6;
	
		matrizProcesos[9][0] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[9][1] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[9][2] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[9][3] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea); 
        matrizProcesos[9][4] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[9][5] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[9][6] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
        matrizProcesos[9][7] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
       	matrizProcesos[9][8] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[9][9] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
   		matrizProcesos[9][10] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
  		matrizProcesos[9][11] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][12] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
    	matrizProcesos[9][13] = new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][14] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][15] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][16] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][17] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][18] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][19] =  new Proceso5(Lector,TS,actual,tokenActual, Errores);//new Proceso5(Lector,TS,actual,tokenActual);
		matrizProcesos[9][20] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
		matrizProcesos[9][21] =  new Proceso5(Lector,TS,actual,tokenActual, Errores);//new Proceso5(Lector,TS,actual,tokenActual);
		matrizProcesos[9][22] =  new Proceso2(Lector,TS,actual,tokenActual, Errores, nroLinea);
	
		matrizProcesos[10][0] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][1] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][2] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][3] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][4] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][5] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][6] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][7] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][8] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][9] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][10] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][11] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][12] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][13] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][14] = new Proceso5(Lector,TS,actual,tokenActual, Errores);
		matrizProcesos[10][15] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][16] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][17] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][18] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][19] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][20] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][21] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
		matrizProcesos[10][22] = new Proceso7(Lector,Errores,nroLinea,tokenActual);
	
	}
}
